<script>
    // 实现slice方法
    Array.prototype.mlslice = function (start, end) {
        let newArr = [];

        // this表示arr1
        // 如果要截取的数组是一个空数组，什么也不做，直接返回空数组
        if (this.length === 0) {
            return newArr;
        }

        // 处理start特殊情况
        start = start || 0
        if (start < 0) {
            start = this.length + start
        } else if (start >= this.length) {
            return newArr;
        }

        // 处理end的特殊的情况
        end = end || this.length;
        if (end > this.length) {
            end = this.length;
        } else if (end <= start) {
            end = this.length + end;
        }

        for (let i = start; i < end; i++) {
            newArr.push(this[i])
        }

        return newArr;
    }

    // slice() 方法可从已有的数组中返回选定的元素。
    // 返回一个新的数组，包含从 start（包括该元素） 到 end （不包括该元素）的 arrayObject 中的元素。

    // start:规定从何处开始选取。如果该参数为负数，
    // 则表示从原数组中的倒数第几个元素开始提取，
    // slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素（包含最后一个元素）

    // end:规定从何处结束选取。该参数是数组片断结束处的数组下标。
    // 如果没有指定该参数，那么切分的数组包含从 start 到数组结束的所有元素。
    // 如果该参数为负数， 则它表示在原数组中的倒数第几个元素结束抽取。 
    // slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素（不包含最后一个元素，也就是只有倒数第二个元素）
    let arr1 = [1, 3, 4, 5, 7, 9];
    let res1 = arr1.mlslice(2, 4); // 2 4 代表都是索引
    console.log(res1); //  [4, 5]

    let res2 = arr1.mlslice(-2, -1);
    console.log(res2); // [7]

    let res3 = arr1.mlslice();
    console.log(res3) // [1, 3, 4, 5, 7, 9]

    let res4 = arr1.mlslice(2);
    console.log(res4) // [1, 3, 4, 5, 7, 9]
</script>